/**
 * 
 */
package medOffice.Gui;

import java.sql.SQLException;
import java.util.Scanner;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

import medOffice.Clinica;
import medOffice.Configuracoes;
import medOffice.Consulta;

/**
 * Classe com mais duas funcionalidades: Deletar Planos de Saude e Visualizar consultas urgentes
 * @author Ana Clara Lacerda
 * @version 1.0 - 04/12/2009
 * 
 */
public class Funcionalidades {

	private Clinica clinica;
	private final String menu = "\nMedOffice - Funcionalidades que não estão na GUI\n"
			+ "Escolha sua opçao:\n"
			+ "1 - Deletar um Plano de Saude\n"
			+ "2 - Visualizar consultas Urgentes\n" + "3 - Sair\n" + "Escolha sua opcao: ";

	public Funcionalidades(Clinica clinicaCapturada) {
		medOffice.GerarBD.main(null);
		this.clinica = clinicaCapturada;
		mostraMenu();
	}

	/**
	 * Mostra o menu e pede sua opcao
	 */
	private void mostraMenu() {
		System.out.print(menu);
		int opcao = recebeInteirosEntre(1, 3);

		while (opcao != 3) {
			switch (opcao) {
			case 1:
				deletaPlano();
				mostraMenu();
				break;
			case 2:
				visualizaUrgentes();
				mostraMenu();
				break;
			}
		}
		System.out.println("Tchau!");

	}

	/**
	 * Lista as consultas urgentes
	 */
	private void visualizaUrgentes() {
		try {
			if (clinica.getAgenda().listaDeUrgencia().isEmpty()) {
				System.out.println("Lista de Urgencia vazia");
			} else {
				System.out.println("Consultas com Urgencia\n");
				try {
					for (Consulta c : clinica.getAgenda().listaDeUrgencia()) {
						System.out.println(c.toString());
					}
				} catch (SQLException e) {
					System.out.println("Erro ao conectar com BD");
				}

			}
		} catch (SQLException e1) {
			System.out.println("Erro ao conectar com BD");
		}

	}

	/**
	 * Exclui o plano escolhido
	 */
	private void deletaPlano() {
		if (clinica.getAgenda().getDonoAgenda().getPlanosDeSaude().isEmpty()) {
			System.out.println("Lista de Planos Vazia");
		} else {
			int opcao = escolhePlano();
			if (opcao == 0) {
				System.out.println("Nenhum Plano foi removido");
			} else {
				try {
					clinica.removePlanoDeSaude(clinica.getAgenda()
							.getDonoAgenda().getPlanosDeSaude().get(opcao - 1));
				} catch (SQLException e) {
					System.out.println("Erro ao conectar com o BD");
				}
			}

		}

	}

	/**
	 * Lista os planos e pede uma escolha
	 * @return o index do Plano escolhido
	 */
	private int escolhePlano() {
		System.out.println("Planos de Saude\n");
		for (int i = 0; i < clinica.getAgenda().getDonoAgenda()
				.getPlanosDeSaude().size(); i++) {
			System.out.println(i
					+ 1
					+ " - "
					+ clinica.getAgenda().getDonoAgenda().getPlanosDeSaude()
							.get(i).toString());
		}
		System.out
				.println("Escolha o Plano a ser excluido: (0 para nao excluir nenhum)");
		int opcao = recebeInteirosEntre(0, clinica.getAgenda().getDonoAgenda()
				.getPlanosDeSaude().size() + 1);
		return opcao;
	}

	/**
	 * Recebe do teclado um inteiro entre dois numeros (incluindo os numeros
	 * limite)
	 * 
	 * @param inicio
	 *            o numero minimo
	 * @param fim
	 *            o numero maximo
	 * @return um numero inteiro entre o minimo e o maximo
	 */
	public int recebeInteirosEntre(int inicio, int fim) {
		Scanner sc = new Scanner(System.in);
		int valor;
		boolean teste = sc.hasNextInt();
		while (!teste) {
			System.out.print("Valor inválido, digite um inteiro entre "
					+ inicio + " e " + fim + ": ");
			sc.next();
			teste = sc.hasNextInt();
		}
		valor = sc.nextInt();
		if (valor < inicio || valor > fim) {
			System.out.print("Valor inválido, digite um inteiro entre "
					+ inicio + " e " + fim + ": ");
			valor = recebeInteirosEntre(inicio, fim);
		}
		return valor;
	}

	/**
	 * Main: checa se os arquivos de configuração existem e roda as
	 * funcionalidade caso existam
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		Clinica clinicaCapturada = null;
		CadastramentoInicial ci = null;
		if (!Configuracoes.existeConfiguracoes()) {
			ci = new CadastramentoInicial();
			ci.inicializa();
		} else {
			try {
				clinicaCapturada = Configuracoes.capturaClinica();
			} catch (Exception e) {
				System.out
						.println("Problema ao tentar iniciar o programa. Arquivos corrompidos "
								+ "ou inexistentes.");
			}
			new Funcionalidades(clinicaCapturada);

		}

	}

}
